#include <iostream>
#include <vector>
using namespace std;

class Matrix {
  static long long count;  // 声明静态成员变量用于统计对象析构次数
 public:
  static long long get_count() { return count; }
  static void clear_count() { count = 0; }
  ~Matrix() { ++count; }
};
long long Matrix::count = 0;  // 定义静态成员变量

Matrix operator+(Matrix a, Matrix b) {  // 传值方式，会调用拷贝构造函数
  return Matrix();
}

Matrix operator*(const Matrix& a, const Matrix& b) {  // 引用方式
  return Matrix();
}

template <typename F>
void test(const int N, F op) {
  cout << Matrix::get_count() << ' ' << flush;
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
      op(i, j);  // 调用运算符
    }
  }
  cout << Matrix::get_count() << endl;
  Matrix::clear_count();
}

int main() {
  const int N = 1024;
  vector<Matrix> v(N);
  auto add = [&v](int i, int j) { v[i] + v[j]; };  // 调用加法算符
  auto mul = [&v](int i, int j) { v[i] * v[j]; };  // 调用乘法算符
  test(N, add);  // 构造3M个对象，2M个是参数，1M个返回值。
  test(N, mul);  // 也有1M个对象用于返回值。
}